
/**
 * 1、如果没有指定任何构造方法，则编译会为当前类添加一个默认构造方法( 公开的、无参的 、空的 )
 *              public  类名() {   }
 * 
 * 2、如果显式指定了带参数的构造方法，则编译器不再为当前类添加默认构造方法
 *       为了将来能够使用无参数的构造方法，就需要显式书写无参数构造方法
 * 
 * 3、对于构造方法来说，多个构造方法之间可以构成重载
 *       一个类中所有的构造方法都是与类名同名的，因此它们的名称一定是相同的。
 *       当多个构造方法的参数不相同( 类型、个数、顺序 ) 时，它们之间就构成重载
 * 
 * 4、当一个类中存在多个重载的构造方法时，创建该类的对象时会根据参数来确定到底调用哪一个构造方法
 */
public class Human { // 没有通过 extends 显式指定父类时，父类就是 java.lang.Object 类

    protected String name ;

    // 构造方法与类名同名、不能显式指定返回类型
    public Human(){ 
        // super();
        System.out.println( "Constructor : Human()" );
    }

    public Human( String name ){ // 为构造方法指定参数
        // super();
        System.out.println( "Constructor : Human(java.lang.String)" );
        this.name = name ; // 通过构造方法完成对实例变量的初始化
    }

    public static void main(String[] args) {
        
        Human h = new Human( "张三丰" );
        System.out.println( h.name ) ;

        Human u = new Human();
        System.out.println( u.name ) ;

    }

}
